package cn.yunyichina.provider.iface.service;


import cn.yunyichina.provider.iface.entity.PersonalUser;
import cn.yunyichina.provider.iface.entity.PersonalUserOpenid;
import cn.yunyichina.provider.iface.entity.base.*;
import cn.yunyichina.provider.iface.entity.common.ResCommon;
import cn.yunyichina.provider.iface.entity.common.Response;

import java.util.List;
import java.util.Map;

/**
 * 云医通基础服务子系统对外接口
 *
 * @author zhangkw
 * @date 2016-07-28
 */
public interface IBase extends IService {
    /*
     * 获取组织配置信息列表
	 *
	 * */
    ResCommon<List<OrgSettingVoResponse>> getOrgSettingList(OrgSettingVo vo);

    /**
     * 更新订单数据,根据id或order_no
     * yyt.base.order.update
     * 如果包含了订单项，则会删除原来的所有订单项，然后执行新增订单项的操作
     *
     * @param data
     */
    OrderExtVo updateOrder(String data);

    /**
     * 新增订单
     * yyt.base.order.add
     *
     * @param data trade_type 交易类型，1支付，2退款
     */
    OrderExtVo addOrder(String data);

    /**
     * 根据code查询Org
     * <br>内部调用接口
     *
     * @param data
     * @return 如果查询到1个，返回Org对象，如果没有找到或多于1个，返回null
     */
    Org getOrgByCode(String orgCode);

    /**
     * 根据id查询org组织
     *
     * @param data
     * @return
     */
    Response findOrgById(String orgId);

    /**
     * 根据appCode 获得OrgApp对象
     * <br>内部调用接口
     *
     * @param orgAppCode
     * @return 如果没有找到，返回null
     */
    OrgApp getOrgAppByAppCode(String orgAppCode);

    /**
     * 根据诊疗卡号查询用户。用于消息发送
     * yyt.base.medicalcard.by.cardno.get
     *
     * @param data
     * @param orgCode
     * @param medicalCardNo
     * @param medicalCardType 卡类型\r\n            1	院内诊疗卡\r\n            2	社保卡\r\n            3	医保卡\r\n            4	区域健康卡\r\n            5	身份证\r\n            6	市民卡\r\n            7	患者唯一标识\r\n            8	临时诊疗卡\r\n            9	医疗证\r\n            10	银联卡\r\n            11	住院号
     * @param sessionid
     * @return
     */
    MedicalCardVo getMedicalCardByCardNo(String strJson, String sessionId, String appId);

    /**
     * 通用查询用户
     *
     * @param strJson 对应数据库字段名
     * @return
     */
    List<PersonalUser> listPersonalUser(String strJson);

    /**
     * 查询诊疗卡
     *
     * @param strJson 对应数据库字段名
     * @return
     */
    List<MedicalCardVo> listMedicalCard(String strJson);

    /**
     * 获取openid对象
     *
     * @param userId
     * @param appId
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    PersonalUserOpenid getPersonalUserOpenid(String userId, String appId,String openId);

    /**
     * 获取openid对象
     *
     * @param userId
     * @param appCode
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    PersonalUserOpenid getPersonalUserOpenidByAppCode(String userId, String appCode,String openId);

    /**
     * 根据身份证获取用户对象
     *
     * @param idCardNo
     * @param idCardType 1：二代身份证，               2：港澳居民身份证，               3：台湾居民身份证，               4：护照
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    PersonalUser getPersonalUserByIdCardNo(String idCardNo, short idCardType);

    /**
     * 根据身份证获取用户对象
     *
     * @param mobile
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    PersonalUser getPersonalUserByMobile(String mobile);

    /**
     * 获得订单
     *
     * @param orderNo
     * @return
     */
    OrderExtVo getOrderByOrderNo(String orderNo);

    /**
     * 就数据库查询
     *
     * @param strJson
     * @return
     */
    List queryZhyySql(String strJson);

    /**
     * 查询订单
     *
     * @param strJson
     * @return
     */
    List<OrderExtVo> listOrder(String strJson);

    /**
     * 系统日志
     *
     * @param strJson
     * @return
     */
    Map<String, Object> listLog(String strJson);

    /**
     * 新增系统日志
     *
     * @param strJson LogVo对象
     * @return
     */
    Response insertLog(String strJson);

    /**
     * 查找匹配的提醒人
     *
     * @param strJson org_id,event_code
     * @return
     */
    List<RemindSettingVo> matchRemindSetting(String strJson);

    /**
     * 获取规则
     *
     * @param ruleDto
     * @return
     */
    RuleResponseDto getRule(RuleDto ruleDto);

    void updateOrderExceptionReason(String id, String reason);

    PersonalUserFamilyDto getPersonalUserFamily(String id);

    PersonalUserFamilyDto getPersonalUserFamilyByInsuranceName(String name);

    void updatePersonalUserFamily(PersonalUserFamilyDto familyDto);

    ResCommon<Void> patientInfoModify(PatientInfoVoOut patientInfoVoOut);

    ResCommon<Void> templateMsgPush(MsgPushVoOut msgPushVoO);

}
